home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 11 / Cream of the Crop 11-1.iso / sound / sbplay25.zip / SOURCE.ZIP / _digplay.asm next >
Assembly Source File  |  1995-07-24  |  3KB  |  112 lines

  1.  
  2. _TEXT   SEGMENT WORD PUBLIC 'CODE'
  3. _TEXT   ENDS
  4.  
  5. _DATA SEGMENT WORD PUBLIC 'DATA'        
  6. _DATA   ENDS
  7.  
  8. CONST   SEGMENT WORD PUBLIC 'CONST'
  9. CONST   ENDS
  10.  
  11. _BSS    SEGMENT WORD PUBLIC 'BSS'
  12. ;GLOBAL UNINITIATED DATA GOES HERE
  13. _BSS    ENDS
  14.  
  15. DGROUP  GROUP CONST,_BSS,_DATA
  16. ;
  17.         ASSUME DS:DGROUP,SS:DGROUP
  18.  
  19. ;EXTRN EXTERNAL SUBROUTINE CALLS GO HERE
  20. ;
  21. ; _digplay FAR Procedure for C Written by John A. Ball  July 24, 1995
  22. ;
  23. ;Plays back sound using DIGPAK drivers
  24. ;
  25. ;       int     digplay(SNDSTRUC far *sndplay);
  26. ;
  27. ;       error=digplay(SNDSTRUC far *sndplay);
  28. ;
  29. _TEXT   SEGMENT
  30.         ASSUME CS:_TEXT
  31.         PUBLIC _digplay
  32.                 
  33. _digplay PROC FAR
  34.  
  35. PARMA           EQU [BP+6]      ;Sound Structure Pointer
  36. PARMB           EQU [BP+10]
  37. PARMS           EQU 4           ;Number of bytes for local storage
  38.  
  39. BUFFERPNT       EQU [BP-4]      ;LOCAL VARIABLES GO HERE
  40.  
  41.         PUSH BP                 ;Save stack Frame
  42.         MOV BP,SP
  43.         SUB SP,PARMS            ;MAKE SPACE FOR LOCAL VARIABLE (INT) ON STACK
  44.         PUSHF
  45.         PUSH DS                 ;Save registers
  46.         PUSH ES
  47.         PUSH SI        
  48.         
  49.         JMP OVERDATA
  50. PENDING_FLAG   LABEL   WORD
  51. PENDING_FLAG_ADDR      DD 0     ;Location of sound pending flag
  52.  
  53. OVERDATA:
  54.         LES DI,PARMA            ;GET SOUND STRUCTURE POINTER
  55.         MOV BUFFERPNT,DI        ;AND SAVE
  56.         MOV DI,ES
  57.         MOV BUFFERPNT+2,DI
  58. ;        
  59.         MOV AX,0688h            ; Function #1 Digplay
  60.         LDS SI,BUFFERPNT
  61.         INT 66H
  62.  
  63. IOWAIT:
  64.         INT 28H                 ;MS-DOS idle handler
  65.         MOV AX,1680H
  66.         INT 2FH                 ;MS-DOS idle call
  67.  
  68.         MOV AH,01H              ;See if key pressed
  69.         INT 16H
  70.         JZ DMA_DONE
  71.         MOV AX,0
  72.         INT 16H                 ;Get the pressed key
  73.         CMP AL,31H              ;See if 1 KEY was pressed?
  74.         JE DONE
  75.         CMP AL,1BH              ;See if ESC key hit?
  76.         JNE DMA_DONE
  77.         MOV AX,068FH            ;Stop all sound
  78.         INT 66H
  79.         MOV AX,0FFFFH           ;EXIT ERROR CODE
  80.         JMP EXIT
  81.  
  82. DMA_DONE:
  83.         PUSH DS
  84.         LDS SI,BUFFERPNT        ;Check Is Playing Flag
  85.         LDS BX,[SI+6]           ;Get address of flag
  86.         MOV AX,[BX]             ;Get Flag
  87.         OR AX,AX                ;and see if zero?
  88.         POP DS
  89.         JZ DONE
  90.         MOV AX,0689H
  91.         INT 66H
  92.         OR AX,AX
  93.         JZ DONE
  94.         JMP IOWAIT
  95.  
  96. DONE:   MOV AX,0                ;OK
  97. EXIT:
  98. RESTORE:
  99.         POP SI                  ;Restore registers
  100.         POP ES
  101.         POP DS
  102.         POPF
  103.         ADD SP,PARMS            ;RESTORE SP
  104.         POP BP                  ;RESTORE BP
  105.         RET                     ;RETURN FAR
  106.  
  107.  
  108. _digplay  ENDP
  109. _TEXT   ENDS        
  110.         END
  111.  
  112.